﻿using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Helpers;
using System.Web.Mvc;
using ComesEnCasa.Entidades;
using ComesEnCasa.Negocio;
using ComesEnCasa.Web.Results;
using ComesEnCasa.Web.Util;

namespace ComesEnCasa.Web.Controllers
{
    public partial class EntidadController : Controller
    {
        public ImageResult Imagen(int entidadId, bool fit = true, int ancho = 200, int alto = 150)
        {
            var entidad = EntidadNegocio.ObtenerConImagen(entidadId);

            return Miniatura(entidad.ImagenEntidad, ancho, alto, fit);
        }

        [OutputCache(CacheProfile = "Imagen")]
        public ImageResult Miniatura(ImagenEntidad imagen, int ancho, int alto, bool fit)
        {
            WebImage webImage;
            if (imagen.foto == null)
            {
                webImage = new WebImage(Server.MapPath("~/Content/images/no-disponible.jpg"));
            }
            else
            {
                webImage = new WebImage(imagen.foto);
            }

            Image image = ArmarImagen(webImage, ancho, alto, fit);

            var ms = new MemoryStream(ImagenUtil.ImageToByteArray(image, ImageFormat.Jpeg));
            //return new Imagenes.ImageResult(ms,"image/jpg",DateTime.Now.AddDays(-7));
            return new ImageResult(ms, "image/jpg", DateTime.Now);
        }


        private Image ArmarImagen(WebImage webImage, int ancho, int alto, bool fit)
        {
            Image image = ImagenUtil.ByteArrayToImage(webImage.GetBytes());

            if (ancho > 0 && alto > 0)
            {

                image = ImagenUtil.Redimensionar(image, ancho, alto);

                if (fit)
                {
                    decimal? puntoMedioY = (decimal) image.Height/2;
                    decimal? puntoMedioX = (decimal) image.Width/2;
                    image = ImagenUtil.Fit(image, ancho, alto, puntoMedioX, puntoMedioY);
                }
            }
            else
            {
                //Para imagenes superiores a 2048
                if (webImage.Width > 1024)
                {
                    image = ImagenUtil.Redimensionar(image, 1024, 1024);
                }
            }
            return image;
        }
    }
}
